package main

import (
	"errors"
	"fmt"
)

type user struct {
	name     string
	password string
}

// 错误处理，使用一个单独的返回值来处理错误信息，不同于java中的异常，go可以清楚的知道哪个函数出现了错误
// 在函数的返回值中，多加一个参数表示可能这个函数会出现错误
// 那么在函数体中就需要return两个值，如果没有错误就返回一个值和nil;
// 如果出现了错误就会返回nil和要打印的错误信息
func findUser(users []user, name string) (v *user, err error) {
	//遍历数组时，一个参数是索引，一个数对应的值
	//当我们不需要索引时可以使用_来代替
	for _, u := range users {
		if u.name == name {
			return &u, nil //nil 是一个预先声明的标识符，表示指针、通道、函数、接口、映射或切片类型的零值。
			//类型必须是指针、通道、函数、接口、映射或切片类型
		}
	}
	return nil, errors.New("not found")
}
func main() {
	u, err := findUser([]user{{"wang", "1024"}}, "wang")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(u.name)

	if u, err := findUser([]user{{"wang", "1024"}}, "li"); err != nil {
		fmt.Println(err)
		return
	} else {
		fmt.Println(u.name)
	}
}
